#define _CRT_SECURE_NO_WARNINGS 1
/*
		文件操作代码

		夏思成

		2024年4月18日

		西科大15号公寓楼
*/


////fputs
//#include <stdio.h>
//
//int main()
//{
//	char arr[] = "abcdefg";
//
//	//打开文件
//	FILE * pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return -1;
//	}
//
//	//将字符串写入文件流中
//	fputs(arr, pf);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}



//fgets
//#include <stdio.h>
//
//int main()
//{
//	char arr[200] = "xxxxxxxxxx";
//
//	//打开文件
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return -1;
//	}
//
//	//从文件中读取数据
//	fgets(arr,40,pf); 
//	printf(arr);
//
//	fgets(arr,40,pf); 
//	printf(arr);
//
//	fgets(arr,40,pf);
//	printf(arr);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}



//fprintf
//#include <stdio.h>
//
//struct S
//{
//	char name[20];
//	int age;
//	float weight;
//};
//
//int main()
//{
//	struct S s = { "zhangsan",18,65.5 };
//
//	//打开文件
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return -1;
//	}
//
//	//将结构体中的格式化的数据写入文件中
//	fprintf(pf, "%s %d %f", s.name, s.age, s.weight);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}


//fscanf
//#include <stdio.h>
//
//struct S
//{
//	char name[20];
//	int age;
//	float weight;
//};
//
//int main()
//{
//	struct S s = { 0 };
//
//	//打开文件
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return -1;
//	}
//
//	//将文件中的格式化数据读取后存放在结构体变量中
//	fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.weight));
//	//读取后将内容打印在屏幕上
//	printf("%s %d %f", s.name, s.age, s.weight);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}


//fwrite
//#include <stdio.h>
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5 };
//	//打开文件
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return -1;
//	}
//
//	//将数组arr的数据以二进制的形式写入文件中
//	fwrite(arr,sizeof(int),5,pf);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}



//fread
//#include <stdio.h>
//
//int main()
//{
//	int arr[20] = { 0 };
//	//打开文件
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return -1;
//	}
//
//	//将文件中储存的5个整形读取出来存放在arr中，并打印在屏幕上
//	fread(arr, sizeof(int), 5, pf);
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}




//sscanf
//#include <stdio.h>
//
//struct S
//{
//	char name[20];
//	int age;
//	float weight;
//};
//int main()
//{
//	struct S s = { 0 };
//	char str[20] = "zhagnsan 18 65.5";
//
//	//从字符串中读取格式化的数据放入结构体变量中
//	sscanf(str, "%s %d %f", s.name, &(s.age), &(s.weight));
//	//打印结构体变量
//	printf("%s %d %f",s.name,s.age,s.weight);
//
//	return 0;
//}



//sprintf
//#include <stdio.h>
//
//struct S
//{
//	char name[20];
//	int age;
//	float weight;
//};
//int main()
//{
//	struct S s = { "zhagnsan", 18, 65.5 };
//	char str[30] = { 0 };
//
//	//从结构体变量中读取格式化数据转化成字符串存放在str中
//	sprintf(str, "%s %d %f", s.name, s.age, s.weight);
//	//打印字符串
//	printf(str);
//
//	return 0;
//}


//#include <stdio.h>
//
//int main()
//{
//	//以读的形式打开文件
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return -1;
//	}
//
//	//文件中已经存放了abcdefghi这个字符串，如果我们直接使用fgetc就会拿到a
//	int ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//fseek
//#include <stdio.h>
//
//int main()
//{
//	//以读的形式打开文件
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return -1;
//	}
//
//	//文件中已经存放了abcdefghi这个字符串，如果我们直接使用fgetc就会拿到a
//	int ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	//我们以起始位置为参考，只需偏移5个位置，就可以拿到f
//	fseek(pf, 5, SEEK_SET);
//	//此时，pf已经指向f了,我们现在在利用fgetc读取一个字符，读到的就是f
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}



//ftell
//#include <stdio.h>
//
//int main()
//{
//	//以读的形式打开文件
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return -1;
//	}
//
//	//我们利用fseek函数使文件指针指向以起始位置为参考偏移量为3的地方
//	fseek(pf,3,SEEK_SET);
//
//	//我们利用ftell函数，判断目前的偏移量是否为3
//	int sz = ftell(pf);
//	printf("偏移量为：%d\n", sz);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}



//rewind
#include <stdio.h>

int main()
{
	//以读的形式打开文件
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return -1;
	}
	//文件事先已经写入了abcdefghi
	//我们以起始位置为参考，只需偏移5个位置，就可以拿到f
	fseek(pf, 5, SEEK_SET);
	int ch = fgetc(pf);
	printf("%c\n", ch);

	//我们在使用rewind函数,使文件指针重新指向起始位置
	rewind(pf);
	printf("%c\n", fgetc(pf));//现在在取出一个字符的话，就是a

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}